package org.sunrise.game.game.main;

import org.sunrise.game.common.config.ConfigReader;
import org.sunrise.game.common.utils.Utils;
import org.sunrise.game.game.gen.CallEnum;
import org.sunrise.game.game.logic.ConfigUtils;
import org.sunrise.game.game.logic.LogicUtils;
import org.sunrise.game.game.logic.ProtoParserUtils;
import org.sunrise.game.game.logic.system.GameSystem;
import org.sunrise.game.game.server.GameManager;
import org.sunrise.game.rpc.function.CallUtils;

import java.util.Collections;
import java.util.Properties;

public class GameServerStartUp {
    public static void main(String[] args) {
        // args[0]:config path args[1]:gameId
        if (args.length == 0) {
            args = new String[]{ "./config/game-config.properties", "1"};
        }
        ConfigReader.loadConfig(args[0]);
        Properties properties = ConfigReader.getProp();
        if (properties == null) {
            return;
        }
        // 设置日志等级
        Utils.setLogLevel(properties.getProperty("log.level"));

        // 创建game服
        var gameClient = GameManager.createGameClient(Integer.parseInt(args[1]));

        // 协议解析初始化
        ProtoParserUtils.init();
        // 协议处理函数初始化
        LogicUtils.init(Collections.singletonList("org.sunrise.game.game.logic"));
        // 加载配置文件
        ConfigUtils.init();
        // rpc初始化
        CallUtils.init(gameClient.getRpcNode().getNodeId(), Collections.singletonList("org.sunrise.game.game.service"), CallEnum.class);
        // 系统模块初始化
        GameSystem.init();

        // 启动检查
        gameClient.start();
        // 连接中心服
        gameClient.connectMaster();
        // 内存检测
        Utils.startMemoryCheck();
    }
}
